home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / QuickTime VR / MacOS / QuickDraw™ 3D 1.0.6F4 SDK / Development / 3DMF parser / 0.9 version / MFOBJTYP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-24  |  3.5 KB  |  149 lines  |  [TEXT/MPS ]

  1. /*==============================================================================
  2.  *
  3.  *    File:        MFOBJTYP.C
  4.  *
  5.  *    Function:    Object name/type lookup
  6.  *
  7.  *    Author(s):    Rick Wong (RWW)
  8.  *
  9.  *    Copyright:    (c) 1995 by Apple Computer, Inc., all rights reserved.
  10.  *
  11.  *    Change History (most recent first):
  12.  *        Fabio    Changed file name to 8 characters
  13.  *        F2H_RWW    File created.
  14.  *==============================================================================
  15.  */
  16. #define    MF3D_Extern
  17. #include "MFOBJTYP.H"
  18. #undef    MF3D_Extern
  19.  
  20. #include <stdlib.h>
  21.  
  22. #include "MFERRORS.H"
  23. #include "MFOBJCTS.H"
  24. #include "MFTYPES.H"
  25. #include "MFASSERT.H"
  26. #include "MFINTOBJ.H"
  27. #include "MFTEXTRD.H"
  28. #include "MFTEXTUT.H"
  29.  
  30. /*==============================================================================
  31.  *    MF3D_FindObjectFromName
  32.  *
  33.  *    Get the object stuff, given the object name
  34.  *==============================================================================
  35.  */
  36. MF3DErr
  37. MF3D_FindObjectFromName(
  38.     const char            *inObjName,
  39.     MF3D_ObjStuffPtr    *outObjStuffPtr,
  40.     MF3DObjType            *outObjectType)
  41. {
  42.     MF3DErr                result;
  43.  
  44.     result = kMF3DNoErr;
  45.  
  46.     if (inObjName[0] == '-')
  47.     {    MF3DInt32    objType;
  48.  
  49.         objType = atoi(inObjName);
  50.  
  51.         if (objType >= 0)
  52.             result = kMF3DErrIllegalObjName;
  53.         else
  54.         {    *outObjStuffPtr = &gMF3D_UnknownObjStuffTable;
  55.             MFASSERT(sizeof(*outObjectType) == sizeof(objType));
  56.             *outObjectType = objType;
  57.         }
  58.     }
  59.     else
  60.     {    MF3D_ObjStuffPtr    objStuffPtr;
  61.  
  62.         objStuffPtr = gMF3D_ObjStuffTable;
  63.         do
  64.         {    if (MF3D_CompareObjNames(inObjName, objStuffPtr->name) == 0)
  65.             {    *outObjStuffPtr = objStuffPtr;
  66.                 break;
  67.             }
  68.             ++objStuffPtr;
  69.         } while (objStuffPtr->type != kMF3DObjInvalid);
  70.         if (objStuffPtr->type == kMF3DObjInvalid)
  71.             result = kMF3DErrIllegalObjName;
  72.         else
  73.             *outObjectType = objStuffPtr->type;
  74.  
  75.     }
  76.  
  77.     return result;
  78. }
  79.  
  80. /*==============================================================================
  81.  *    MF3D_FindObjectFromType
  82.  *
  83.  *    Get the object stuff, given the object type
  84.  *==============================================================================
  85.  */
  86. MF3DErr
  87. MF3D_FindObjectFromType(
  88.     MF3DObjType            inObjType,
  89.     MF3D_ObjStuffPtr    *outObjStuffPtr)
  90. {
  91.     MF3DErr                result;
  92.  
  93.     result = kMF3DNoErr;
  94.  
  95.     if (inObjType < 0)
  96.     {    *outObjStuffPtr = &gMF3D_UnknownObjStuffTable;
  97.     }
  98.     else
  99.     {    MF3D_ObjStuffPtr    objStuffPtr;
  100.  
  101.         objStuffPtr = gMF3D_ObjStuffTable;
  102.         do
  103.         {    if (inObjType == objStuffPtr->type)
  104.             {    *outObjStuffPtr = objStuffPtr;
  105.                 break;        /* ### NORMAL LOOP EXIT ### */
  106.             }
  107.             ++objStuffPtr;
  108.         } while (objStuffPtr->type != kMF3DObjInvalid);
  109.         if (objStuffPtr->type == kMF3DObjInvalid)
  110.             result = kMF3DErrIllegalObjName;
  111.     }
  112.  
  113.     return result;
  114. }
  115.  
  116. /*==============================================================================
  117.  *    ConvertUserDefinedObjType
  118.  *
  119.  *    Negative numbers are user-defined object types.
  120.  *    Verify that this one exists.
  121.  *==============================================================================
  122.  */
  123. MF3DErr
  124. MF3D_ConvertUserDefinedObjType(
  125.     MF3D_FilePtr    inMetafilePtr,
  126.     MF3DObjType        inObjType,
  127.     MF3DCStringPtr    *outObjName)
  128. {
  129.     MF3DUns32            numTypes;
  130.     MF3D_TypeListPtr    typeListPtr;
  131.     MF3DErr                result;
  132.  
  133.     /* Assume we will not find what we are looking for */
  134.     result = kMF3DErrIllegalObjName;
  135.  
  136.     typeListPtr = inMetafilePtr->typeTable.types;
  137.     for (numTypes = inMetafilePtr->typeTable.nTypes;
  138.             result != kMF3DNoErr && numTypes > 0;
  139.             --numTypes, ++typeListPtr)
  140.     {    MFASSERT(sizeof(inObjType) == sizeof(typeListPtr->number));
  141.         if (inObjType == (MF3DObjType)typeListPtr->number)
  142.         {    *outObjName = MF3D_DuplicateCString(typeListPtr->name);
  143.             result = kMF3DNoErr;    /* ### REAL LOOP EXIT ### */
  144.         }
  145.     }
  146.  
  147.     return result;
  148. }
  149.